<script>
    // 1.数组转树的第一种方法 : 运用递归的方法
    const  arr = [
    { 'id': '29', 'pid': '',     'name': '总裁办' },
    { 'id': '2c', 'pid': '',     'name': '财务部' },
    { 'id': '2d', 'pid': '2c',   'name': '财务核算部'},
    { 'id': '2f', 'pid': '2c',   'name': '薪资管理部'},
    { 'id': 'd2', 'pid': '',     'name': '技术部' },
    { 'id': 'd3', 'pid': 'd2',   'name': 'Java研发部'}
  ]

  function array2Trees(data,pid) {
    let tree = data.filter(item => item.pid === pid)
    // 0: {id: '29', pid: '', name: '总裁办'}
//1: {id: '2c', pid: '', name: '财务部'}
//2: {id: 'd2', pid: '', name: '技术部'}
// 遍历tree里面的对象item,添加属性children,再次调用array2Trees,看arr里的对象的pid等于tree里面的对象item的id
// 如果等于,就构成上下属关系
tree.forEach(item => {
    item.children = array2Trees(data,item.id)
});
return tree   // 返回tree数组
  }

    console.log(array2Trees(arr,''))
    /*(3) [{…}, {…}, {…}]
0: {id: '29', pid: '', name: '总裁办', children: Array(0)}
1: {id: '2c', pid: '', name: '财务部', children: Array(2)} { 'id': '2d', 'pid': '2c',   'name': '财务核算部'},
    { 'id': '2f', 'pid': '2c',   'name': '薪资管理部'},
2: {id: 'd2', pid: '', name: '技术部', children: Array(1)}  { 'id': 'd3', 'pid': 'd2',   'name': 'Java研发部'}
length: 3
[[Prototype]]: Array(0)*/
</script>